// 内置模块- 事件处理器Event  (events)

const EventEmitter = require('events')   // 等同于一个父类 实现了 添加事件 移除事件 等方法
/**
 * on(事件名，执行函数)  ==  addListener(事件名，执行函数)    添加事件
 * prependListener(事件名，执行函数)    向前添加事件 （先执行）
 * emit(事件名，函数参数)      执行事件
 * setMaxListeners(最大数)    设置可以添加事件的最大数量
 * eventNames()       返回当前实例对象添加的事件名称
 * off(事件名称，事件函数) == removeListener(事件名称，事件函数)   移除事件
 * 
 * http://nodejs.cn/api/events.html
 */

class MyEmitter extends EventEmitter{}

const myEmitter = new MyEmitter(); 

myEmitter.on('sayHi',(name)=>{
    console.log('hello I am '+name)
})
myEmitter.prependListener('sayHi',()=>{
    console.log('...')
})

myEmitter.emit('sayHi','KL')

console.log(myEmitter.eventNames())



const callbackA = ()=>{
    console.log('callbackA')
    myEmitter.off('call',callbackB)
}
const callbackB = ()=>{
    console.log('callbackB')
}
myEmitter.on('call',callbackA)
myEmitter.on('call',callbackB)

myEmitter.emit('call')  // [callbackA callbackB]    移除了监听器 callbackB，但它依然会被调用

myEmitter.emit('call') // [callbackA]   callbackB已被移除

